package com.jiuling.qiniu.oss.model;

import com.jiuling.qiniu.oss.model.enums.FileRestoreStatusEnum;
import com.jiuling.qiniu.oss.model.enums.FileStatusEnum;
import com.jiuling.qiniu.oss.model.enums.FileTypeEnum;

import java.util.Map;

/**
 * 文件信息模型
 * @author 紫灵
 * @date 2023年05月23日 11时05分32秒
 */
public class FileInfoModel {

    /**
     * 文件名
     */
    public String key;

    /**
     * 文件hash值
     */
    public String hash;

    /**
     * 文件大小，单位：字节
     */
    public long fsize;

    /**
     * 文件上传时间，单位为：100纳秒
     */
    public long putTime;

    /**
     * 归档/深度归档存储文件的解冻状态，归档/深度归档文件冻结时，不返回该字段。
     */
    public FileRestoreStatusEnum restoreStatus;

    /**
     * 文件的mimeType
     */
    public String mimeType;

    /**
     * 文件上传时设置的endUser
     */
    public String endUser;

    /**
     * 文件的存储类型，
     */
    public FileTypeEnum type;

    /**
     * 文件的状态
     */
    public FileStatusEnum status;

    /**
     * 文件的md5值
     */
    public String md5;

    /**
     * 文件过期删除日期，int64 类型，Unix 时间戳格式，具体文件过期日期计算参考 生命周期管理。
     * 文件在设置过期时间后才会返回该字段（通过生命周期规则设置文件过期时间，仅对该功能发布后满足规则条件新上传文件返回该字段；
     * 历史文件想要返回该字段需要在功能发布后可通过 修改文件过期删除时间 API 或者 修改文件生命周期 API 指定过期时间；对于已
     * 经设置过过期时间的历史文件，到期都会正常过期删除，只是服务端没有该字段返回)
     * 例如：值为1568736000的时间，表示文件会在2019/9/18当天内删除。
     */
    public Long expiration;


    /**
     * 文件生命周期中转为低频存储的日期，int64 类型，Unix 时间戳格式 ，具体日期计算参考 生命周期管理。
     * 文件在设置转低频后才会返回该字段（通过生命周期规则设置文件转低频，仅对该功能发布后满足规则条件新上传文件返回该字段；
     * 历史文件想要返回该字段需要在功能发布后可通过 修改文件生命周期 API 指定转低频时间；对于已经设置过转低频时间的历史文
     * 件，到期都会正常执行，只是服务端没有该字段返回)
     * 例如：值为1568736000的时间，表示文件会在2019/9/18当天转为低频存储类型。
     */
    public Long transitionToIA;

    /**
     * 文件生命周期中转为归档存储的日期，int64 类型，Unix 时间戳格式 ，具体日期计算参考 生命周期管理。
     * 文件在设置转归档后才会返回该字段（通过生命周期规则设置文件转归档，仅对该功能发布后满足规则条件新上传文件返回该字段；
     * 历史文件想要返回该字段需要在功能发布后可通过 修改文件生命周期 API 指定转归档时间；对于已经设置过转归档时间的历史文
     * 件，到期都会正常执行，只是服务端没有该字段返回)
     * 例如：值为1568736000的时间，表示文件会在2019/9/18当天转为归档存储类型。
     */
    public Long transitionToArchive;

    /**
     * 文件生命周期中转为深度归档存储的日期，int64 类型，Unix 时间戳格式 ，具体日期计算参考 生命周期管理。
     * 文件在设置转深度归档后才会返回该字段（通过生命周期规则设置文件转深度归档，仅对该功能发布后满足规则条件新上传文件返回该字段；
     * 历史文件想要返回该字段需要在功能发布后可通过 修改文件生命周期 API 指定转深度归档时间；对于已经设置过转深度归档时间的历史文
     * 件，到期都会正常执行，只是服务端没有该字段返回)
     * 例如：值为1568736000的时间，表示文件会在2019/9/18当天转为深度归档存储类型。
     */
    public Long transitionToDeepArchive;

    /**
     * 自定义 meta data 数据
     */
    public Map<String, Object> meta;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getHash() {
        return hash;
    }

    public void setHash(String hash) {
        this.hash = hash;
    }

    public long getFsize() {
        return fsize;
    }

    public void setFsize(long fsize) {
        this.fsize = fsize;
    }

    public long getPutTime() {
        return putTime;
    }

    public void setPutTime(long putTime) {
        this.putTime = putTime;
    }

    public FileRestoreStatusEnum getRestoreStatus() {
        return restoreStatus;
    }

    public void setRestoreStatus(FileRestoreStatusEnum restoreStatus) {
        this.restoreStatus = restoreStatus;
    }

    public String getMimeType() {
        return mimeType;
    }

    public void setMimeType(String mimeType) {
        this.mimeType = mimeType;
    }

    public String getEndUser() {
        return endUser;
    }

    public void setEndUser(String endUser) {
        this.endUser = endUser;
    }

    public FileTypeEnum getType() {
        return type;
    }

    public void setType(FileTypeEnum type) {
        this.type = type;
    }

    public FileStatusEnum getStatus() {
        return status;
    }

    public void setStatus(FileStatusEnum status) {
        this.status = status;
    }

    public String getMd5() {
        return md5;
    }

    public void setMd5(String md5) {
        this.md5 = md5;
    }

    public Long getExpiration() {
        return expiration;
    }

    public void setExpiration(Long expiration) {
        this.expiration = expiration;
    }

    public Long getTransitionToIA() {
        return transitionToIA;
    }

    public void setTransitionToIA(Long transitionToIA) {
        this.transitionToIA = transitionToIA;
    }

    public Long getTransitionToArchive() {
        return transitionToArchive;
    }

    public void setTransitionToArchive(Long transitionToArchive) {
        this.transitionToArchive = transitionToArchive;
    }

    public Long getTransitionToDeepArchive() {
        return transitionToDeepArchive;
    }

    public void setTransitionToDeepArchive(Long transitionToDeepArchive) {
        this.transitionToDeepArchive = transitionToDeepArchive;
    }

    public Map<String, Object> getMeta() {
        return meta;
    }

    public void setMeta(Map<String, Object> meta) {
        this.meta = meta;
    }
}
